home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / iis / iisperm.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  225 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <regex.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9.  
  10. #define BUF 4096 
  11. int sockfd;
  12. int port;
  13. struct sockaddr_in eyepee;
  14. char *host;
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18.   int readresult = 0;
  19.   int scriptresult = 0;
  20.   int executeresult = 0;
  21.   int dirresult = 0;
  22.   char dir[50];
  23.  
  24.   if (argc != 4) {
  25.   fprintf(stderr, "Usage: %s <ip.ip.ip.ip> <port> <dir>\n", argv[0]);
  26.   exit(8);
  27.   } 
  28.   
  29.   strncpy(dir, argv[3], sizeof(dir));
  30.  
  31.   eyepee.sin_family = AF_INET;
  32.   eyepee.sin_port = htons(atoi(argv[2]));
  33.   inet_aton(argv[1], &eyepee.sin_addr);
  34.   host = argv[1];
  35.  
  36.   readresult = readaccess(dir);
  37.   if (readresult == 1) {
  38.      printf("Read Access is Allowed for this Directory\n");
  39.   } else {
  40.      printf("Read Access is Forbidden for this Directory\n");
  41.   }
  42.  
  43.   scriptresult = scriptaccess(dir);
  44.   if (scriptresult == 1) {
  45.      printf("Script Access is Allowed for this Directory\n");
  46.   } else {
  47.      printf("Script Access is Forbidden for this Directory\n");
  48.   }
  49.  
  50.   executeresult = executeaccess(dir);
  51.   if (executeresult == 1) {
  52.      printf("Execute Access is Allowed for this Directory\n");
  53.   } else {
  54.      printf("Execute Access is Forbidden for this Directory\n");
  55.   }
  56.  
  57.   dirresult = dirlist(dir,argv[1]);
  58.   if (dirresult == 1) {
  59.      printf("Directory Listing is Allowed for this Directory\n");
  60.   } else {
  61.      printf("Directory Listing is Forbidden for this Directory\n");
  62.   } 
  63.      
  64.   return(0);
  65. }
  66.  
  67.  
  68. int readaccess(char *dir)
  69. {
  70.   char sendbuf[125];
  71.   char recvbuffer[BUF];
  72.   char *http_resp;
  73.   char *rec_sptr;
  74.  
  75.   if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  76.   {
  77.      perror("socket");
  78.      exit(1);
  79.   }
  80.  
  81.   if(connect(sockfd, (struct sockaddr *) &eyepee, sizeof(eyepee)) < 0)
  82.   {
  83.      perror("connect");
  84.   }
  85.  
  86.   snprintf(sendbuf, 100, "GET %s/no-file.txt HTTP/1.0 \x0A\x0D\x0A\x0D",dir); 
  87.   
  88.   send(sockfd, sendbuf, strlen(sendbuf),0);
  89.   recv(sockfd, recvbuffer,sizeof(recvbuffer),0);
  90.  
  91.   http_resp = recvbuffer;
  92.   rec_sptr = strchr(recvbuffer, '\n');
  93.  
  94.   *rec_sptr = '\0';
  95.   ++rec_sptr;
  96.   
  97.   if(strncmp(http_resp, "HTTP/1.1 404 404 Object Not Found", 33) == 0) {
  98.      printf("404 Not Found\n");
  99.      close(sockfd);
  100.      return (1);
  101.   } else if(strncmp(http_resp, "HTTP/1.1 403 Access Forbidden",29) == 0) {
  102.      printf("403 Access Forbidden\n");
  103.      close(sockfd);
  104.      return (0);
  105.   }
  106. }
  107.  
  108. int scriptaccess(char *dir)
  109. {
  110.   char sendbuf[125];
  111.   char recvbuffer[BUF];
  112.   char *http_resp;
  113.   char *rec_sptr;
  114.  
  115.   if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  116.   {
  117.      perror("socket");
  118.      exit(1);
  119.   }
  120.  
  121.   if(connect(sockfd, (struct sockaddr *) &eyepee, sizeof(eyepee)) < 0)
  122.   {
  123.      perror("connect");
  124.   }
  125.  
  126.   snprintf(sendbuf, 100, "GET %s/no-file.asp HTTP/1.0 \x0A\x0D\x0A\x0D",dir);
  127.  
  128.   send(sockfd, sendbuf, strlen(sendbuf),0);
  129.   recv(sockfd, recvbuffer,sizeof(recvbuffer),0);
  130.  
  131.   http_resp = recvbuffer;
  132.   rec_sptr = strchr(recvbuffer, '\n');
  133.  
  134.   *rec_sptr = '\0';
  135.   ++rec_sptr;
  136.  
  137.   if(strncmp(http_resp, "HTTP/1.1 404 404 Object Not Found", 33) == 0) {
  138.      printf("404 Not Found\n");
  139.      close(sockfd);
  140.      return (1);
  141.   } else if(strncmp(http_resp, "HTTP/1.1 403 Access Forbidden",29) == 0) {
  142.      printf("403 Access Forbidden\n");
  143.      close(sockfd);
  144.      return (0);
  145.   }
  146. }
  147.  
  148. int executeaccess(char *dir)
  149. {
  150.   char sendbuf[125];
  151.   char recvbuffer[BUF];
  152.   char *http_resp;
  153.   char *rec_sptr;
  154.  
  155.   if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  156.   {
  157.      perror("socket");
  158.      exit(1);
  159.   }
  160.  
  161.   if(connect(sockfd, (struct sockaddr *) &eyepee, sizeof(eyepee)) < 0)
  162.   {
  163.      perror("connect");
  164.   }
  165.  
  166.   snprintf(sendbuf, 100, "GET %s/no-file.dll HTTP/1.0 \x0A\x0D\x0A\x0D",dir);
  167.  
  168.   send(sockfd, sendbuf, strlen(sendbuf),0);
  169.   recv(sockfd, recvbuffer,sizeof(recvbuffer),0);
  170.  
  171.   http_resp = recvbuffer;
  172.   rec_sptr = strchr(recvbuffer, '\n');
  173.  
  174.   *rec_sptr = '\0';
  175.   ++rec_sptr;
  176.  
  177.   if(strncmp(http_resp, "HTTP/1.1 500 Server Error",25) == 0) {   
  178.      printf("500 Server Error\n");
  179.      close(sockfd);
  180.      return (1);
  181.   } else if(strncmp(http_resp, "HTTP/1.1 404 404 Object Not Found", 33) == 0) {
  182.      printf("404 Object Not Found\n");
  183.      close(sockfd);
  184.      return (0);
  185.   }
  186. }
  187.  
  188. int dirlist(char *dir, char *host)
  189. {
  190.   char sendbuf[200];
  191.   char recvbuffer[BUF];
  192.   int    status;
  193.   regex_t    re;
  194.   char *pattern = "[To Parent Directory]";
  195.   if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  196.   {
  197.      perror("socket");
  198.      exit(1);
  199.   }
  200.  
  201.   if(connect(sockfd, (struct sockaddr *) &eyepee, sizeof(eyepee)) < 0)
  202.   {
  203.      perror("connect");
  204.   }
  205.  
  206.   
  207.   snprintf(sendbuf, 200, "GET %s HTTP/1.0 \r\nAccept-Language: en-us\r\nUser-Agent: Mozilla/4.0\r\nHost: %s\r\nConnection: Keep-Alive\r\n\r\n", dir, host);
  208.  
  209.   send(sockfd, sendbuf, strlen(sendbuf),0);
  210.   recv(sockfd, recvbuffer,sizeof(recvbuffer),0);
  211.   recv(sockfd, recvbuffer,sizeof(recvbuffer),0);
  212.   close(sockfd);
  213.    
  214.  
  215.     if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB) != 0) {
  216.        return(0);      
  217.     }
  218.     status = regexec(&re, recvbuffer, (size_t) 0, NULL, 0);
  219.     regfree(&re);
  220.     if (status != 0) {
  221.       return(0);      
  222.     }
  223.   return (1);
  224. }
  225.